자바 ORM 표준 JPA 프로그래밍 객체지향 쿼리 언어 2 - 중급 문법 2 JPQL과 SQL을 비교해보면 JPQL에서 where m = :member로 엔티티를 직접 사용하는 부분이 SQL에서 where m.id=?로 기본 키 값을 사용하도록 변환된 것을 확인할 수 있다. 엔티티 대신 아래 예제와 같이 식별자 값을 직접 사용할 수 있다. 정적 쿼리 : 미리 정의한 쿼리에 이름을 부여해서 필요할 때 사용할 수 있는데 이것을 Named 쿼리라 한다. Named 쿼리는 ... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍 17. 다양한 연관관계 매핑(3) 관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없다. 그래서 보통 다대다 관계를 일대다, 다대일 관계로 풀어내는 연결 테이블을 사용한다. 따라서 회원 테이블과 상품 테이블만으로는 이 관계를 표현할 수 없다. 이 그림을 보면 Member_Product 연결 테이블을 추가했다. 이 테이블을 사용해서 다대다 관계를 일대다, 다대일 관계로 풀어낼 수 있다. 이 연결 테이블은 ... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍 39. 객체지향 쿼리 언어(6) 정리하면 다음 3가지 경로 표현식이 있다. JPQL에서 경로 표현식을 사용해서 경로 탐색을 하려면 다음 3가지 경로에 따라 어떤 특징이 있는지 이해해야 한다. 상태 필드 경로 : 경로 탐색의 끝이다. 단일 값 연관 경로 : 묵시적으로 내부 조인이 일어난다. 컬렉션 값 연관 경로 : 묵시적으로 내부 조인이 일어난다. 예제를 통해 경로 탐색을 하나씩 알아보자. 상태 필드 경로 탐색 다음 JPQL... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍 52. 웹 애플리케이션 제작(1) 스프링 프레임워크와 JPA를 사용해서 실제 웹 애플리케이션을 만들어보자. 먼저 스프링 프레임워크와 JPA를 사용해서 웹 애플리케이션을 개발할 수 있도록 개발 환경을 설정하겠다. 웹 계층 : 스프링 MVC 프로젝트 루트에 있는 메이븐 설정 파일인 pom.xml을 열어서 현재 프로젝트 정보와 사용할 라이브러리를 아래 예제와 같이 지정하자. 스프링 MVC(spring-webmvc) : 스프링 MV... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍 4. JPA 시작(2) 그때는 persistence.xml에 다음과 같이 <class>를 사용해서 JPA에서 사용할 엔티티 클래스를 지정하면 된다. 엔티티 매니저 설정 1. 엔티티 매니저 설정 JPA를 시작하려면 우선 persistence.xml의 설정 정보를 사용해서 엔티티 매니저 팩토리를 생성해야 한다. 이때 Persistence 클래스를 사용하는데 이 클래스는 엔티티 매니저 팩토리를 생성해서 JPA를 사용할 ... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍 35. 객체지향 쿼리 언어(2) JPQL도 SQL과 비슷하게 SELECT, UPDATE, DELETE 문을 사용할 수 있다. 위의 예제의 JPQL 문법을 보면 전체 구조는 SQL과 비슷한 것을 알 수 있다. 엔티티 명은 @Entity(name="XXX")로 지정할 수 있다. JPA 구현체로 하이버네이트를 사용하면 HQL도 사용할 수 있다. HQL은 SELECT username FROM Member m의 usrename처럼 ... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍 33. 실전 예제(값 타입 매핑) 아래 예제의 Member, Delivery에는 주소 정보가 나열되어 있다. 값 타입 적용 전 아래 예제처럼 Address라는 값 타입을 만들어서 나열된 주소 대신에 사용하도록 변경해보자. 아래 그림은 값 타입을 사용한 결과 UML이다. 값 타입 주소(Address) 회원(Member)에 값 타입 적용 배송(Delivery)에 값 타입 적용 위의 예제(값 타입 주소(Address))의 Addr... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍 5. 영속성 관리(1) 엔티티 매니저는 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다. 정확히 이야기하면 persist() 메소드는 엔티티 매니저를 사용해서 회원 엔티티를 영속성 컨텍스트에 저장한다. 그리고 엔티티 매니저를 통해서 영속성 컨텍스트에 접근할 수 있고, 영속성 컨텍스트를 관리할 수 있다. 엔티티 매니저를 통해서 엔티티를 영속성 컨텍스트에 저장했다. 이렇게 영속... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍 10. 연관관계 매핑 기초(1) 예를 들어 회원과 팀이 관계가 있을 때 회원 -> 팀 또는 팀 -> 회원 둘 중 한쪽만 참조하는 것을 단방향 관계라 하고, 회원 -> 팀, 팀 -> 회원 양쪽 모두 서로 참조하는 것을 양방향 관계라 한다. 연관관계 중에선 다대일(N:1) 단방향 관계를 가장 먼저 이해해야 한다. 회원 객체는 Member.team 필드(멤버변수)로 팀 객체와 연관관계를 맺는다. 회원 테이블은 TEAM_ID 외래... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍 38. 객체지향 쿼리 언어(5) 페치 조인을 사용해서 회원 엔티티를 조회하면서 연관된 팀 엔티티도 함께 조회하는 JPQL을 보자. 참고로 일반적인 JPQL 조인과는 다르게 m.team 다음에 별칭이 없는데 페치 조인은 별칭을 사용할 수 없다. 엔티티 페치 조인 JPQL에서 select m으로 회원 엔티티만 선택했는데 실행된 SQL을 보면 SELECT M.*, T.*로 회원과 연관된 팀도 함께 조회된 것을 확인할 수 있다. ... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍 30. 값 타입(1) JPA의 데이터 타입을 가장 크게 분류하면 엔티티 타입과 값 타입으로 나눌 수 있다. 임베디드 타입(embedded type)(복합 값 타입) 기본값 타입은 String, int처럼 자바가 제공하는 기본 데이터 타입이고 임베디드 타입은 JPA에서 사용자가 직접 정의한 값 타입이다. 2. 임베디드 타입(복합 값 타입) 새로운 값 타입을 직접 정의해서 사용할 수 있는데, JPA에서는 이것을 임베... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍 16. 다양한 연관관계 매핑(2) 반면에 일대일 관계는 주 테이블이나 대상 테이블 둘 중 어느 곳이나 외래 키를 가질 수 있다. 테이블은 주 테이블이든 대상 테이블이든 외래 키 하나만 있으면 양쪽으로 조회할 수 있다. 따라서 일대일 관계는 주 테이블이나 대상 테이블 중에 누가 외래 키를 가질지 선택해야 한다. 주 객체가 대상 객체를 참조하는 것처럼 주 테이블에 외래 키를 두고 대상 테이블을 참조한다. 이 방법의 장점은 주 테... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍 11. 연관관계 매핑 기초(2) 연관관계를 등록, 수정, 삭제, 조회하는 예제를 통해 연관관계를 어떻게 사용하는지 알아보자. 연관관계를 매핑한 엔티티를 어떻게 저장하는지 아래 예제로 알아보자. JPA에서 엔티티를 저장할 때 연관된 모든 엔티티는 영속 상태여야 한다. 회원 엔티티는 팀 엔티티를 참조하고 저장했다. JPA는 참조한 팀의 식별자(Team.id)를 외래 키로 사용해서 적절한 등록 쿼리를 생성한다. 이때 실행된 SQ... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍 영속성 관리 - 내부 동작 방식 ✔️ 엔티티 매니저 팩토리와 엔티티 매니저 📣 영속성 컨텍스트 EntityManager.persist(entity); : 영속성 컨텍스트에 엔티티를 저장한다는 것이다. 엔티티 매니저를 통해서 영속성 컨텍스트에 접근한다. 영속 (managed) : 영속성 컨텍스트에 관리되는 상태 준영속 (detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태 ✔️ 영속 엔티티 매니저를 통해 영속성 컨... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍 41. 객체지향 쿼리 언어(8) JPQL로 부모 엔티티를 조회하면 그 자식 엔티티도 함께 조회한다. 아래 예제를 보면 Item의 자식으로 Book, Album, Movie가 있다. 다음과 같이 조회하면 Item의 자식도 같이 조회한다. 단일 테이블 전략(InheritanceType.SINGLE_TABLE)을 사용할 때 실행되는 SQL은 다음과 같다. 조인 전략(InheritanceType.JOINED)을 사용할 때 실행되는... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍
객체지향 쿼리 언어 2 - 중급 문법 2 JPQL과 SQL을 비교해보면 JPQL에서 where m = :member로 엔티티를 직접 사용하는 부분이 SQL에서 where m.id=?로 기본 키 값을 사용하도록 변환된 것을 확인할 수 있다. 엔티티 대신 아래 예제와 같이 식별자 값을 직접 사용할 수 있다. 정적 쿼리 : 미리 정의한 쿼리에 이름을 부여해서 필요할 때 사용할 수 있는데 이것을 Named 쿼리라 한다. Named 쿼리는 ... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍 17. 다양한 연관관계 매핑(3) 관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없다. 그래서 보통 다대다 관계를 일대다, 다대일 관계로 풀어내는 연결 테이블을 사용한다. 따라서 회원 테이블과 상품 테이블만으로는 이 관계를 표현할 수 없다. 이 그림을 보면 Member_Product 연결 테이블을 추가했다. 이 테이블을 사용해서 다대다 관계를 일대다, 다대일 관계로 풀어낼 수 있다. 이 연결 테이블은 ... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍 39. 객체지향 쿼리 언어(6) 정리하면 다음 3가지 경로 표현식이 있다. JPQL에서 경로 표현식을 사용해서 경로 탐색을 하려면 다음 3가지 경로에 따라 어떤 특징이 있는지 이해해야 한다. 상태 필드 경로 : 경로 탐색의 끝이다. 단일 값 연관 경로 : 묵시적으로 내부 조인이 일어난다. 컬렉션 값 연관 경로 : 묵시적으로 내부 조인이 일어난다. 예제를 통해 경로 탐색을 하나씩 알아보자. 상태 필드 경로 탐색 다음 JPQL... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍 52. 웹 애플리케이션 제작(1) 스프링 프레임워크와 JPA를 사용해서 실제 웹 애플리케이션을 만들어보자. 먼저 스프링 프레임워크와 JPA를 사용해서 웹 애플리케이션을 개발할 수 있도록 개발 환경을 설정하겠다. 웹 계층 : 스프링 MVC 프로젝트 루트에 있는 메이븐 설정 파일인 pom.xml을 열어서 현재 프로젝트 정보와 사용할 라이브러리를 아래 예제와 같이 지정하자. 스프링 MVC(spring-webmvc) : 스프링 MV... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍 4. JPA 시작(2) 그때는 persistence.xml에 다음과 같이 <class>를 사용해서 JPA에서 사용할 엔티티 클래스를 지정하면 된다. 엔티티 매니저 설정 1. 엔티티 매니저 설정 JPA를 시작하려면 우선 persistence.xml의 설정 정보를 사용해서 엔티티 매니저 팩토리를 생성해야 한다. 이때 Persistence 클래스를 사용하는데 이 클래스는 엔티티 매니저 팩토리를 생성해서 JPA를 사용할 ... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍 35. 객체지향 쿼리 언어(2) JPQL도 SQL과 비슷하게 SELECT, UPDATE, DELETE 문을 사용할 수 있다. 위의 예제의 JPQL 문법을 보면 전체 구조는 SQL과 비슷한 것을 알 수 있다. 엔티티 명은 @Entity(name="XXX")로 지정할 수 있다. JPA 구현체로 하이버네이트를 사용하면 HQL도 사용할 수 있다. HQL은 SELECT username FROM Member m의 usrename처럼 ... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍 33. 실전 예제(값 타입 매핑) 아래 예제의 Member, Delivery에는 주소 정보가 나열되어 있다. 값 타입 적용 전 아래 예제처럼 Address라는 값 타입을 만들어서 나열된 주소 대신에 사용하도록 변경해보자. 아래 그림은 값 타입을 사용한 결과 UML이다. 값 타입 주소(Address) 회원(Member)에 값 타입 적용 배송(Delivery)에 값 타입 적용 위의 예제(값 타입 주소(Address))의 Addr... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍 5. 영속성 관리(1) 엔티티 매니저는 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다. 정확히 이야기하면 persist() 메소드는 엔티티 매니저를 사용해서 회원 엔티티를 영속성 컨텍스트에 저장한다. 그리고 엔티티 매니저를 통해서 영속성 컨텍스트에 접근할 수 있고, 영속성 컨텍스트를 관리할 수 있다. 엔티티 매니저를 통해서 엔티티를 영속성 컨텍스트에 저장했다. 이렇게 영속... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍 10. 연관관계 매핑 기초(1) 예를 들어 회원과 팀이 관계가 있을 때 회원 -> 팀 또는 팀 -> 회원 둘 중 한쪽만 참조하는 것을 단방향 관계라 하고, 회원 -> 팀, 팀 -> 회원 양쪽 모두 서로 참조하는 것을 양방향 관계라 한다. 연관관계 중에선 다대일(N:1) 단방향 관계를 가장 먼저 이해해야 한다. 회원 객체는 Member.team 필드(멤버변수)로 팀 객체와 연관관계를 맺는다. 회원 테이블은 TEAM_ID 외래... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍 38. 객체지향 쿼리 언어(5) 페치 조인을 사용해서 회원 엔티티를 조회하면서 연관된 팀 엔티티도 함께 조회하는 JPQL을 보자. 참고로 일반적인 JPQL 조인과는 다르게 m.team 다음에 별칭이 없는데 페치 조인은 별칭을 사용할 수 없다. 엔티티 페치 조인 JPQL에서 select m으로 회원 엔티티만 선택했는데 실행된 SQL을 보면 SELECT M.*, T.*로 회원과 연관된 팀도 함께 조회된 것을 확인할 수 있다. ... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍 30. 값 타입(1) JPA의 데이터 타입을 가장 크게 분류하면 엔티티 타입과 값 타입으로 나눌 수 있다. 임베디드 타입(embedded type)(복합 값 타입) 기본값 타입은 String, int처럼 자바가 제공하는 기본 데이터 타입이고 임베디드 타입은 JPA에서 사용자가 직접 정의한 값 타입이다. 2. 임베디드 타입(복합 값 타입) 새로운 값 타입을 직접 정의해서 사용할 수 있는데, JPA에서는 이것을 임베... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍 16. 다양한 연관관계 매핑(2) 반면에 일대일 관계는 주 테이블이나 대상 테이블 둘 중 어느 곳이나 외래 키를 가질 수 있다. 테이블은 주 테이블이든 대상 테이블이든 외래 키 하나만 있으면 양쪽으로 조회할 수 있다. 따라서 일대일 관계는 주 테이블이나 대상 테이블 중에 누가 외래 키를 가질지 선택해야 한다. 주 객체가 대상 객체를 참조하는 것처럼 주 테이블에 외래 키를 두고 대상 테이블을 참조한다. 이 방법의 장점은 주 테... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍 11. 연관관계 매핑 기초(2) 연관관계를 등록, 수정, 삭제, 조회하는 예제를 통해 연관관계를 어떻게 사용하는지 알아보자. 연관관계를 매핑한 엔티티를 어떻게 저장하는지 아래 예제로 알아보자. JPA에서 엔티티를 저장할 때 연관된 모든 엔티티는 영속 상태여야 한다. 회원 엔티티는 팀 엔티티를 참조하고 저장했다. JPA는 참조한 팀의 식별자(Team.id)를 외래 키로 사용해서 적절한 등록 쿼리를 생성한다. 이때 실행된 SQ... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍 영속성 관리 - 내부 동작 방식 ✔️ 엔티티 매니저 팩토리와 엔티티 매니저 📣 영속성 컨텍스트 EntityManager.persist(entity); : 영속성 컨텍스트에 엔티티를 저장한다는 것이다. 엔티티 매니저를 통해서 영속성 컨텍스트에 접근한다. 영속 (managed) : 영속성 컨텍스트에 관리되는 상태 준영속 (detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태 ✔️ 영속 엔티티 매니저를 통해 영속성 컨... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍 41. 객체지향 쿼리 언어(8) JPQL로 부모 엔티티를 조회하면 그 자식 엔티티도 함께 조회한다. 아래 예제를 보면 Item의 자식으로 Book, Album, Movie가 있다. 다음과 같이 조회하면 Item의 자식도 같이 조회한다. 단일 테이블 전략(InheritanceType.SINGLE_TABLE)을 사용할 때 실행되는 SQL은 다음과 같다. 조인 전략(InheritanceType.JOINED)을 사용할 때 실행되는... 자바 ORM 표준 JPA 프로그래밍자바 ORM 표준 JPA 프로그래밍